FBX SDK简单使用(一)

您所在的位置:网站首页 3ds max切线 FBX SDK简单使用(一)

FBX SDK简单使用(一)

2023-08-12 05:58| 来源: 网络整理| 查看: 265

FBX SDK简单使用(一)简介

FBX是Autodesk的一个常用的跨平台的三维数据格式,应用很广泛,这里是官方API,这里是官方例子。FBX的安装可以参照这里,基本介绍可以参考这里。

查看FBX文件数据

这是在整个使用过程中个人认为帮助很大的一个功能,3ds MAX中可以直接设置,在导出的时候可以选择二进制的格式或者ASCII的格式,如下图:

在FBX SDK中通过对FbxExporter设置可以得到一样的效果。

1234// FBX设置输出ASCII格式文件FbxExporter* fbxExporter = FbxExporter::Create(fbxManager, "");int fbxFormat = fbxManager->GetIOPluginRegistry()->FindWriterIDByDescription("FBX ascii(*.fbx)");bool exportStatus = fbxExporter->Initialize(fileOutput, fbxFormat, fbxManager->GetIOSettrings());

在VS Code中查看输出的文件显示如下:这样可以方便查看FBX文件是否包含需要的数据,导入到引擎的时候,也方便验证数据。

文件结构

FBX文件是以树(SceneTree)的形式进行存储的,以RootNode作为起始,在官方的例子中可以看出

通过遍历Node可以得到相应Node存储的数据,每个Node有对应的在FbxNodeAttribute枚举中的类型。例如eMesh,eSkeleton等。

常见概念Control Point 和 Polygon Vertex

以3dsMax中最简单的Cube为例子,在正常格式下输出对应的Fbx得到的control point数量是8,polygon vertex数量是36,polygon数量是12。对应到Cube上,可以看到正常见到的Cube拥有8个顶点对应Control Point的数量,而正常box有6个面,在实际输出的时候,被分成了12个三角面,每个三角面对应一个polygon,而每个三角面三个顶点,因此polygon vertex的数量是12 * 3 = 36。每个polygon vertex可能拥有同一个位置,这时候是索引到同一个control point。

在Fbx SDK中通过以下代码获取

12345678910111213141516171819// 顶点序号int vertexIdx = 0;int polygonNum = mesh->GetPolygonCount();for(int i=0;iGetPolygonSize(i); for(int j=0;jGetPolygonVertex(i, j); ... ... vertexIdx++; }} Fbx Layer

在FBX的结构中,法线,切线,颜色,uv等都是通过layer进行添加,挂载在对应的mesh上。我们可以看到如下类似的代码,在GetElementNormal(0)括号中0代表第一层,例如uv等可能有好几套,通过这里可以指定第几套。特别需要注意的是,在3dsMax中

12345678// 获取法线FbxGeometryElementNormal* vertexNormal = mesh->GetElementNormal(0);// 获取切线FbxGeometryElementTangent* vertexTangent = mesh->GetElementTangent(0); // 获取顶点色FbxGeometryElementVertexColor* vertexColor = mesh->GetElementVertexColor(0);// 获取UVFbxGeometryElementUV* vertexUV = mesh->GetElementUV(0);

需要注意的是:

通过maxscript指令box()创建的盒子和直接在max场景中创建的盒子数据是不一样的,box()指令直接创建的盒子不带uv,没法通过代码生成tangent。 在Unity中导入切线数据,需要同时生成副法线数据,Unity中才可见。 Mapping Mode

eByControlPoint

在这个模式下Layer的数据是通过控制点去添加的,每个顶点的数据和对应的控制点的数据相同,在这里用顶点和控制点的法线进行尝试,得到的结果如下,可以看到整个Cube的边缘显得十分的柔和。

对应效果:

eByPolygonVertex

在这个模式下Layer的数据是通过顶点去添加的,在这里用顶点和控制点的法线进行尝试,得到的结果如下,可以看到整个Cube的边缘显得很锐利。

对应效果:

Reference Mode

这是一种选择是否使用优化存储的模式,eDirect表示直接通过索引来获取相应的信息,对应数量与control point或者vertex相同,eIndexToDirect则会将相同数据合并,并通过control point或者vertex的二级索引指向需要的数据,这样重复数据能够指向同一个位置节省存储空间。

在eIndexToDirect中需要通过如下代码获取索引

1int index = vertexNormal->GetIndexArray().GetAt(vertexIdx);

eDirect在FBX文件中显示如下

eIndexToDirect在FBX文件中显示如下



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3